// import 'dart:async';
// import 'package:film/model/film_model.dart';
// import 'package:film/service/api_service.dart';
// import 'package:flutter/material.dart';
// import 'package:flutter/services.dart';
// import 'package:flutter_vlc_player/flutter_vlc_player.dart';
// import 'package:get/get_rx/src/rx_types/rx_types.dart';
// import 'package:get/get_state_manager/get_state_manager.dart';

// class CustomVideoPlayer extends StatefulWidget {
//   final String vodId;

//   const CustomVideoPlayer({super.key, required this.vodId});

//   @override
//   State<CustomVideoPlayer> createState() => _CustomVideoPlayerState();
// }

// class _CustomVideoPlayerState extends State<CustomVideoPlayer> {
//   final DioService apiService = DioService();
//   late VlcPlayerController _vlcController;

//   // --- 状态变量 ---
//   bool _isInitialized = false;
//   bool _hasError = false;
//   String _errorMessage = '';
//   bool _showControls = true;
//   Timer? _hideControlsTimer;
//   bool _isFullScreen = false;
//   bool _isSeeking = false;
//   Duration _seekingPosition = Duration.zero;
//   var isShow = false.obs;

//   @override
//   void initState() {
//     super.initState();
//     _initializePlayer(widget.vodId);
//   }

//   Future<void> _initializePlayer(String vodId) async {
//     setState(() {
//       _isInitialized = false;
//       _hasError = false;
//       _errorMessage = '';
//       _showControls = false;
//     });

//     try {
//       isShow.value = false;
//       var url;
//       final ApiResponse<VideoDetails> response = await apiService.getVideoByID(vodId: vodId);
//       if (response.success && response.data != null) {
//         Film film = Film.fromJson(response.data!.video);
//         var videoItemList = parseVideoItems(film.vodPlayUrl ?? "");
//         if (videoItemList.isNotEmpty) {
//           final ApiResponse<String> res = await apiService.getVideoUrl(url: videoItemList[0].code);
//           if (res.success) {
//             url = res.data ?? '';
//           }
//         }
//       }
//       _vlcController = VlcPlayerController.network(
//         url,
//         // 提示：如果遇到特定视频有声无画，可以尝试将 hwAcc 改为 HwAcc.disabled
//         hwAcc: HwAcc.full,
//         autoPlay: true,
//         options: VlcPlayerOptions(),
//       );
//       _vlcController.addListener(_onPlayerStateChanged);
//       isShow.value = true;
//     } catch (e) {
//       if (!mounted) return;
//       setState(() {
//         _hasError = true;
//         _errorMessage = '创建播放器失败: ${e.toString()}';
//       });
//     }
//   }

//   List<VideoItem> parseVideoItems(String vodPlayUrl) {
//     final List<VideoItem> result = [];
//     final episodes = vodPlayUrl.split('#');
//     for (var episode in episodes) {
//       final parts = episode.split('\$');
//       if (parts.length == 2) {
//         result.add(VideoItem(
//           name: parts[0].trim(),
//           code: parts[1].trim(),
//         ));
//       }
//     }
//     return result;
//   }

//   void _onPlayerStateChanged() {
//     // 如果 Widget 已被销毁，或 controller 不存在，则不执行任何操作
//     if (!mounted) return;
//     // 如果用户正在拖动进度条，则不更新状态，避免冲突
//     if (_isSeeking) return;

//     // 检查播放器是否出错
//     if (_vlcController.value.hasError) {
//       if (!_hasError) {
//         // 避免重复设置状态
//         setState(() {
//           _hasError = true;
//           _errorMessage = _vlcController.value.errorDescription;
//         });
//       }
//       return;
//     }

//     // 检查播放器是否已初始化
//     // if (_vlcController.value.isInitialized) {
//     //   // 初始化成功且正在播放时，启动隐藏控件的计时器
//     //   if (_vlcController.value.isPlaying) {
//     //     setState(() {
//     //       _showControls = false;
//     //     });
//     //   }
//     // }

//     // 视频播放结束时，显示控制栏
//     if (_vlcController.value.isEnded) {
//       setState(() {
//         _showControls = true;
//       });
//     }

//     // 触发UI刷新以更新进度条、播放/暂停按钮等
//     if (mounted) {
//       setState(() {});
//     }
//   }

//   void _disposeControllers() {
//     _hideControlsTimer?.cancel();
//     _vlcController.removeListener(_onPlayerStateChanged);
//     _vlcController.dispose();
//   }

//   @override
//   void dispose() {
//     // 退出前确保恢复屏幕方向
//     if (_isFullScreen) {
//       _exitFullScreen();
//     }
//     _disposeControllers();
//     super.dispose();
//   }

//   void _toggleControlsVisibility() {
//     setState(() {
//       _showControls = !_showControls;
//       if (_showControls && _vlcController.value.isPlaying) {
//         _startHideControlsTimer();
//       } else {
//         _hideControlsTimer?.cancel();
//       }
//     });
//   }

//   void _startHideControlsTimer() {
//     _hideControlsTimer?.cancel();
//     _hideControlsTimer = Timer(const Duration(seconds: 3), () {
//       if (mounted && _vlcController.value.isPlaying && !_isSeeking) {
//         setState(() {
//           _showControls = false;
//         });
//       }
//     });
//   }

//   void _togglePlayPause() {
//     final isPlaying = _vlcController.value.isPlaying;
//     if (isPlaying) {
//       _vlcController.pause();
//       _hideControlsTimer?.cancel();
//     } else {
//       // 如果视频已结束，则从头播放
//       if (_vlcController.value.isEnded) {
//         _vlcController.seekTo(Duration.zero);
//         _vlcController.play();
//       } else {
//         _vlcController.play();
//       }
//       _startHideControlsTimer();
//     }
//     // 立即更新UI，避免按钮状态延迟
//     setState(() {});
//   }

//   void _toggleFullScreen() {
//     if (_isFullScreen) {
//       _exitFullScreen();
//     } else {
//       _enterFullScreen();
//     }
//   }

//   void _enterFullScreen() {
//     if (!mounted) return;
//     setState(() => _isFullScreen = true);
//     SystemChrome.setPreferredOrientations([
//       DeviceOrientation.landscapeLeft,
//       DeviceOrientation.landscapeRight,
//     ]);
//     SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
//   }

//   void _exitFullScreen() {
//     if (!mounted) return;
//     setState(() => _isFullScreen = false);
//     SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
//     SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values);
//   }

//   String _formatDuration(Duration duration) {
//     String twoDigits(int n) => n.toString().padLeft(2, '0');
//     final minutes = twoDigits(duration.inMinutes.remainder(60));
//     final seconds = twoDigits(duration.inSeconds.remainder(60));
//     return '$minutes:$seconds';
//   }

//   @override
//   Widget build(BuildContext context) {
//     final body = Center(child: _buildPlayerWithControls());
//     if (_isFullScreen) {
//       // 全屏时，使用一个黑色的 Scaffold 作为背景
//       return Container(
//         color: Colors.black,
//         child: body,
//       );
//     }
//     // 非全屏时，显示 AppBar
//     return Container(
//       color: Colors.black,
//       child: body,
//       margin: EdgeInsets.only(top: 30),
//     );
//   }

//   // <--- 关键修改后的方法 --- >
//   Widget _buildPlayerWithControls() {
//     return Obx(() {
//       // 1. 如果播放出错，显示错误信息
//       // if (_hasError) {
//       //   // 注意：_hasError 应该是 .obs 变量
//       //   return Padding(
//       //     padding: const EdgeInsets.all(16.0),
//       //     child: Text(
//       //       '播放失败: $_errorMessage',
//       //       style: const TextStyle(color: Colors.red, fontSize: 16),
//       //       textAlign: TextAlign.center,
//       //     ),
//       //   );
//       // }

//       // // 2. 如果控制器还未创建，显示加载动画
//       // if (_vlcController == null) {
//       //   return const Center(child: CircularProgressIndicator());
//       // }

//       // 3. 控制器已创建，构建播放器界面
//       return isShow.value
//           ? AspectRatio(
//               aspectRatio: 16 / 9,
//               child: GestureDetector(
//                 onTap: _toggleControlsVisibility,
//                 behavior: HitTestBehavior.opaque,
//                 child: Stack(
//                   alignment: Alignment.center,
//                   children: [
//                     VlcPlayer(
//                       controller: _vlcController,
//                       aspectRatio: 16 / 9,
//                       placeholder: const Center(child: CircularProgressIndicator()),
//                     ),
//                     _buildControlsOverlay(),
//                   ],
//                 ),
//               ),
//             )
//           : Center(child: CircularProgressIndicator());
//     });
//   }
//   // <--- 关键修改结束 --- >

//   Widget _buildControlsOverlay() {
//     // 播放结束时，图标应显示为重播
//     IconData centerIcon = Icons.play_circle_filled;
//     if (_vlcController.value.isInitialized) {
//       if (_vlcController.value.isPlaying) {
//         centerIcon = Icons.pause_circle_filled;
//       } else if (_vlcController.value.isEnded) {
//         centerIcon = Icons.replay_circle_filled_outlined;
//       }
//     }

//     return AnimatedOpacity(
//       opacity: _showControls ? 1.0 : 0.0,
//       duration: const Duration(milliseconds: 300),
//       // 使用 IgnorePointer 防止在控件隐藏时响应手势
//       child: IgnorePointer(
//         ignoring: !_showControls,
//         child: Container(
//           color: Colors.black.withOpacity(0.4),
//           child: Column(
//             mainAxisAlignment: MainAxisAlignment.spaceBetween,
//             children: [
//               // 顶部空白占位
//               const SizedBox(height: 60),
//               // 中间的播放/暂停大按钮
//               if (_isInitialized)
//                 IconButton(
//                   icon: Icon(
//                     centerIcon,
//                     color: Colors.white,
//                     size: 60.0,
//                   ),
//                   onPressed: _togglePlayPause,
//                 ),
//               // 底部的控制条
//               _buildBottomControls()
//             ],
//           ),
//         ),
//       ),
//     );
//   }

//   Widget _buildBottomControls() {
//     // 拖动时显示拖动的位置，否则显示播放器的当前位置
//     final position = _isSeeking ? _seekingPosition : (_vlcController.value.position);
//     final duration = _vlcController.value.duration;

//     // 如果视频时长为零（例如直播或未初始化完成），则不显示进度条
//     final hasDuration = duration.inMilliseconds > 0;

//     return Container(
//       // color: Colors.amber,
//       height: 40,
//       padding: const EdgeInsets.symmetric(horizontal: 12.0),
//       child: Row(
//         mainAxisAlignment: MainAxisAlignment.center,
//         children: [
//           // 播放/暂停小按钮
//           Container(
//             // color: Colors.black,
//             child: GestureDetector(
//               child: Icon(
//                 _vlcController.value.isPlaying ? Icons.pause : Icons.play_arrow,
//                 color: Colors.white,
//               ),
//               onTap: _togglePlayPause,
//             ),
//           ),
//           // 当前播放时间
//           if (hasDuration) Text(_formatDuration(position), style: const TextStyle(color: Colors.white)),
//           if (hasDuration) const SizedBox(width: 8),
//           // 进度条
//           if (hasDuration)
//             Expanded(
//               child: Slider(
//                 value: position.inMilliseconds.toDouble().clamp(0.0, duration.inMilliseconds.toDouble()),
//                 min: 0.0,
//                 max: duration.inMilliseconds.toDouble(),
//                 activeColor: Colors.white,
//                 inactiveColor: Colors.white38,
//                 onChangeStart: (value) {
//                   setState(() {
//                     _isSeeking = true;
//                     _seekingPosition = Duration(milliseconds: value.toInt());
//                   });
//                   _hideControlsTimer?.cancel();
//                 },
//                 onChanged: (value) {
//                   setState(() {
//                     _seekingPosition = Duration(milliseconds: value.toInt());
//                   });
//                 },
//                 onChangeEnd: (value) {
//                   _vlcController.seekTo(Duration(milliseconds: value.toInt()));
//                   // 稍微延迟一下，等待 seekTo 生效后再恢复状态更新
//                   Future.delayed(const Duration(milliseconds: 200), () {
//                     if (mounted) {
//                       setState(() {
//                         _isSeeking = false;
//                       });
//                     }
//                   });
//                   _startHideControlsTimer();
//                 },
//               ),
//             ),
//           if (hasDuration) const SizedBox(width: 8),
//           // 视频总时长
//           if (hasDuration) Text(_formatDuration(duration), style: const TextStyle(color: Colors.white)),
//           // 如果是直播等没有时长的视频，则用一个占位符撑开空间
//           if (!hasDuration) const Spacer(),
//           // 全屏按钮
//           GestureDetector(
//             child: Icon(
//               _isFullScreen ? Icons.fullscreen_exit : Icons.fullscreen,
//               color: Colors.white,
//             ),
//             onTap: _toggleFullScreen,
//           ),
//         ],
//       ),
//     );
//   }
// }
